home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 January: Mac OS SDK / Dev.CD Jan 96 SDK / Dev.CD Jan 96 SDK1.toast / Development Kits (Disc 1) / AppleScript / Development Tools / Sample Code / 7Edit / Pascal Sources / SVEditAEUtils.p < prev    next >
Encoding:
Text File  |  1994-02-25  |  7.7 KB  |  321 lines  |  [TEXT/MPS ]

  1. UNIT SVEditAEUtils;
  2.  
  3. (*
  4.     SVEditAEUtils.p
  5.     
  6.     Version 3.0d8
  7.     
  8.     Copyright © SRL Data 1992, 1993
  9.     
  10.     All rights reserved
  11.     
  12.     Produced by : SRL Data
  13.     Originally Developed for UK.DTS
  14.  
  15. *)
  16.  
  17. INTERFACE
  18.  
  19. USES 
  20.         Types,
  21.         QuickDraw,
  22.         Packages,
  23.         GestaltEqu,
  24.         Editions,
  25.         Printing,
  26.         AppleEvents;
  27.  
  28. (**-----------------------------------------------------------------------
  29.     Utility Routines for getting data from AEDesc's
  30.   -----------------------------------------------------------------------**)
  31.     
  32. PROCEDURE GetRawDataFromDescriptor(theDesc      : AEDesc;
  33.                                                                         destPtr     : Ptr;
  34.                                                                         destMaxSize : Size;
  35.                                                                         VAR actSize : Size);
  36.                                                                          
  37. FUNCTION GetPStringFromDescriptor(sourceDesc : AEDesc;VAR resultStr : Str255):OSErr;
  38.  
  39. FUNCTION GetIntegerFromDescriptor(sourceDesc : AEDesc; VAR result:INTEGER): OSErr;
  40.     
  41. FUNCTION GetBooleanFromDescriptor(sourceDesc : AEDesc;
  42.                                                                     VAR result : Boolean): OSErr;
  43.                                                                             
  44. FUNCTION GetLongIntFromDescriptor(sourceDesc   : AEDesc;
  45.                                                                     VAR result   : longInt):OSErr;
  46.  
  47. FUNCTION GetRectFromDescriptor(sourceDesc   : AEDesc;
  48.                                                              VAR result   : Rect):OSErr;
  49.  
  50. FUNCTION GetPointFromDescriptor(sourceDesc   : AEDesc;
  51.                                                               VAR result   : Point):OSErr;
  52.  
  53. FUNCTION GetStyledTextFromDescIntoTEHandle(VAR sourceTextDesc:AEDesc;
  54.                                            theHTE:TEHandle):OSErr;
  55.                                                                         
  56. IMPLEMENTATION
  57.  
  58. USES Menus,
  59.      AERegistry,
  60.          
  61.          SVEditGlobals,
  62.          SVEditUtils;
  63.  
  64. PROCEDURE GetRawDataFromDescriptor(    theDesc            : AEDesc;
  65.                                                                         destPtr            : Ptr;
  66.                                                                         destMaxSize    : Size;
  67.                                                                         VAR actSize    : Size);
  68. VAR copySize : Size;
  69.  
  70. BEGIN
  71.     IF (theDesc.dataHandle<>nil) THEN
  72.         BEGIN
  73.             hLock(Handle(theDesc.dataHandle));
  74.             actSize := GetHandleSize(Handle(theDesc.dataHandle));
  75.             
  76.             copySize := LesserOf(actSize, destMaxSize);
  77.             
  78.             BlockMove(theDesc.dataHandle^, destPtr, copySize);
  79.             
  80.             hUnlock(Handle(theDesc.dataHandle));
  81.         END
  82.     ELSE
  83.         actSize := 0;
  84. END; (*GetRawDataFromDescriptor*)
  85.  
  86. FUNCTION GetPStringFromDescriptor(sourceDesc   : AEDesc;
  87.                                                                   VAR resultStr: Str255):OSErr;
  88. VAR myErr      : OSErr;
  89.         ignoreErr  : OSErr;
  90.         stringSize : Size;
  91.         resultDesc : AEDesc;
  92.  
  93. BEGIN
  94.     resultDesc.dataHandle := nil;
  95.     
  96.     resultStr := '';
  97.     myErr := AECoerceDesc(sourceDesc,typeChar,resultDesc);
  98.     
  99.     IF (myErr=noErr) THEN
  100.         GetRawDataFromDescriptor(resultDesc,
  101.                                                          Ptr(ORD4(@resultStr)+1),
  102.                                                          255,
  103.                                                          stringSize);
  104.     IF (stringSize<256) THEN
  105.         resultStr[0]:=CHR(stringSize)
  106.     ELSE
  107.         myErr := errAECoercionFail;
  108.         
  109.     IF (resultDesc.dataHandle<>NIL) THEN
  110.         ignoreErr:= AEDisposeDesc(resultDesc);
  111.         
  112.     GetPStringFromDescriptor := myErr;
  113. END;
  114.  
  115. FUNCTION GetIntegerFromDescriptor(sourceDesc   : AEDesc;
  116.                                                                     VAR result   : INTEGER):OSErr;
  117. VAR myErr           : OSErr;
  118.     ignoreErr   : OSErr;
  119.         intSize            : Size;
  120.         resultDesc    : AEDesc;
  121.         
  122. BEGIN
  123.     result := 0;
  124.     myErr := AECoerceDesc(sourceDesc,typeShortInteger,resultDesc);
  125.     
  126.     IF (myErr=noErr) THEN
  127.         BEGIN
  128.             GetRawDataFromDescriptor(resultDesc,
  129.                                                              @result,
  130.                                                              2,
  131.                                                              intSize);
  132.             IF (intSize>2) THEN
  133.                 myErr := errAECoercionFail;
  134.         END;
  135.     
  136.     IF (resultDesc.dataHandle<>NIL) THEN
  137.         ignoreErr := AEDisposeDesc(resultDesc);
  138.         
  139.     GetIntegerFromDescriptor := myErr;
  140. END;
  141.  
  142.  
  143. FUNCTION GetBooleanFromDescriptor(sourceDesc   : AEDesc;
  144.                                                                     VAR result   : Boolean):OSErr;
  145. VAR myErr           : OSErr;
  146.     ignoreErr   : OSErr;
  147.         boolSize        : Size;
  148.         resultDesc    : AEDesc;
  149.         
  150. BEGIN
  151.     result := FALSE;
  152.     myErr  := AECoerceDesc(sourceDesc,typeBoolean,resultDesc);
  153.     
  154.     IF (myErr=noErr) THEN
  155.         BEGIN
  156.             GetRawDataFromDescriptor(resultDesc,
  157.                                                              @result,
  158.                                                              sizeOf(Boolean),
  159.                                                              boolSize);
  160.             IF (boolSize>sizeOf(Boolean)) THEN
  161.                 myErr := errAECoercionFail;
  162.         END;
  163.     
  164.     IF (resultDesc.dataHandle<>NIL) THEN
  165.         ignoreErr := AEDisposeDesc(resultDesc);
  166.         
  167.     GetBooleanFromDescriptor := myErr;
  168. END;
  169.  
  170. FUNCTION GetLongIntFromDescriptor(sourceDesc   : AEDesc;
  171.                                                                     VAR result   : longInt):OSErr;
  172. VAR myErr           : OSErr;
  173.     ignoreErr   : OSErr;
  174.         intSize            : Size;
  175.         resultDesc    : AEDesc;
  176.         
  177. BEGIN
  178.     result := 0;
  179.     myErr := AECoerceDesc(sourceDesc,typeLongInteger,resultDesc);
  180.     
  181.     IF (myErr=noErr) THEN
  182.         BEGIN
  183.             GetRawDataFromDescriptor(resultDesc,
  184.                                                              @result,
  185.                                                              4,
  186.                                                              intSize);
  187.             IF (intSize>4) THEN
  188.                 myErr := errAECoercionFail;
  189.         END;
  190.     
  191.     IF (resultDesc.dataHandle<>NIL) THEN
  192.         ignoreErr := AEDisposeDesc(resultDesc);
  193.         
  194.     GetLongIntFromDescriptor := myErr;
  195. END; (*GetLongIntFromDescriptor*)
  196.  
  197. FUNCTION GetRectFromDescriptor(sourceDesc   : AEDesc;
  198.                                                              VAR result   : Rect):OSErr;
  199. VAR myErr           : OSErr;
  200.     ignoreErr   : OSErr;
  201.         rectSize        : Size;
  202.         resultDesc    : AEDesc;
  203.         
  204. BEGIN
  205.     SetRect(result,0,0,0,0);
  206.     myErr := AECoerceDesc(sourceDesc,typeQDRectangle,resultDesc);
  207.     
  208.     IF (myErr=noErr) THEN
  209.         BEGIN
  210.             GetRawDataFromDescriptor(resultDesc,
  211.                                                              @result,
  212.                                                              sizeof(Rect),
  213.                                                              rectSize);
  214.             IF (rectSize<sizeof(rect)) THEN
  215.                 myErr := errAECoercionFail;
  216.         END;
  217.     
  218.     IF (resultDesc.dataHandle<>NIL) THEN
  219.         ignoreErr := AEDisposeDesc(resultDesc);
  220.         
  221.     GetRectFromDescriptor := myErr;
  222. END; (*GetRectFromDescriptor*)
  223.  
  224. FUNCTION GetPointFromDescriptor(sourceDesc   : AEDesc;
  225.                                                               VAR result   : Point):OSErr;
  226. VAR myErr           : OSErr;
  227.     ignoreErr   : OSErr;
  228.         ptSize          : Size;
  229.         resultDesc    : AEDesc;
  230.         
  231. BEGIN
  232.     SetPt(result,0,0);
  233.     
  234.     myErr := AECoerceDesc(sourceDesc,typeQDPoint,resultDesc);
  235.     
  236.     IF (myErr=noErr) THEN
  237.         BEGIN
  238.             GetRawDataFromDescriptor(resultDesc,
  239.                                                              @result,
  240.                                                              sizeof(Point),
  241.                                                              ptSize);
  242.                                                              
  243.             IF (ptSize<sizeof(Point)) THEN
  244.                 myErr := errAECoercionFail;
  245.                 
  246.         END;
  247.     
  248.     IF (resultDesc.dataHandle<>NIL) THEN
  249.         ignoreErr := AEDisposeDesc(resultDesc);
  250.         
  251.     GetPointFromDescriptor := myErr;
  252. END; (*GetPointFromDescriptor*)
  253.  
  254.  (* 
  255.     Name:    GetStyledTextFromDescIntoTEHandle
  256.     Purpose: Takes the text in an AEDesc containing typeIntlText and puts it in
  257.              a styled text edit record at the current insertion point.
  258.                      Looks for typeIntlText, typeStyledText, typeChar in that order.
  259. *)
  260.  
  261. FUNCTION GetStyledTextFromDescIntoTEHandle(VAR sourceTextDesc:AEDesc; theHTE:TEHandle):OSErr;
  262.     VAR
  263.         styledTextDesc : AEDesc;
  264.         textStyleDesc  : AEDesc;
  265.         rawTextDesc    : AEDesc;
  266.         myErr          : OSErr;
  267.         ignoreErr      : OSErr;
  268.         
  269.     BEGIN
  270.         styledTextDesc.dataHandle := nil;
  271.         textStyleDesc.dataHandle  := nil;
  272.         rawTextDesc.dataHandle    := nil;
  273.     
  274.         {
  275.             Coerce to an AERecord and then extract the parts of the
  276.             styled text - works for typeIntlText, typeStyledText
  277.         }
  278.  
  279.         myErr := AECoerceDesc(sourceTextDesc, typeAERecord, styledTextDesc);
  280.         
  281.         IF (myErr=noErr) THEN
  282.             BEGIN    
  283.                 myErr := AEGetKeyDesc(styledTextDesc,
  284.                                                           keyAEText,
  285.                                                           typeChar,
  286.                                                           rawTextDesc);
  287.                                                          
  288.                 myErr := AEGetKeyDesc(styledTextDesc,
  289.                                                           keyAEStyles,
  290.                                                           typeScrapStyles,
  291.                                                           textStyleDesc);
  292.             END
  293.         ELSE
  294.             BEGIN
  295.                 myErr := AECoerceDesc(sourceTextDesc, typeChar, rawTextDesc);
  296.                 
  297.                 textStyleDesc.dataHandle := nil; (* so that TEStylInsert acts like TEInsert *)                
  298.             END;
  299.                 
  300.         HLock(Handle(rawTextDesc.dataHandle));
  301.                                                  
  302.         TEStylInsert(rawTextDesc.dataHandle^,
  303.                                  GetHandleSize(rawTextDesc.dataHandle),
  304.                                  StScrpHandle(textStyleDesc.dataHandle),
  305.                                  theHTE);
  306.                                  
  307.         HUnlock(Handle(rawTextDesc.dataHandle));
  308.         
  309.         IF (textStyleDesc.dataHandle<>nil) THEN
  310.             ignoreErr := AEDisposeDesc(textStyleDesc);
  311.  
  312.         IF (rawTextDesc.dataHandle<>nil) THEN
  313.             ignoreErr := AEDisposeDesc(rawTextDesc);
  314.  
  315.         IF (styledTextDesc.dataHandle<>nil) THEN
  316.             ignoreErr := AEDisposeDesc(styledTextDesc);
  317.             
  318.         GetStyledTextFromDescIntoTEHandle := myErr;
  319.     END;
  320.  
  321. END.